package cn.iocoder.yudao.module.museum.utils;

import cn.iocoder.yudao.framework.common.exception.ErrorCode;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.bpm.api.task.BpmCommonApi;
import cn.iocoder.yudao.module.bpm.api.task.dto.BpmCommonCreateReqDTO;
import cn.iocoder.yudao.module.bpm.api.task.dto.BpmCommonCreateRespDTO;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Component;

import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;

/**
 * @Author 王铁
 * @Description TODO
 * @Date 2023/8/11 11:21
 * @Version 1.0
 */
@Component
public class BpmUtils {

  @Resource
  private BpmCommonApi bpmCommonApi;

  /**
   * 创建提交流程
   * @Author 王铁
   * @Description TODO
   * @Date 2023/8/11 11:29
   * @Version 1.0
   */
  public BpmCommonCreateRespDTO createAndSubmitFlow(String busId ,String flowName,BpmCommonCreateReqDTO reqDTO) {
    // 拼接参数
    reqDTO.setId(busId);
    reqDTO.setKey(reqDTO.getKey());
    reqDTO.getVariables().put("name", flowName);
    // 创建提交流程
    CommonResult<BpmCommonCreateRespDTO> bpmCommonCreateRespDTO = bpmCommonApi.createAndSubmitFlow(reqDTO);

    //判断是否提交失败，失败抛出异常
    if(bpmCommonCreateRespDTO != null && bpmCommonCreateRespDTO.getData() == null) {
      throw exception(new ErrorCode(500, bpmCommonCreateRespDTO.getMsg())) ;
    }

    return bpmCommonCreateRespDTO.getData() ;
  }

  /**
   *    * 创建提交流程
   * @Author 王铁
   * @Description TODO
   * @Date 2023/8/11 11:29
   * @Version 1.0
   */
  public BpmCommonCreateRespDTO createAndSubmitFlow(BpmCommonCreateReqDTO reqDTO) {
    // 拼接参数
    reqDTO.setId(reqDTO.getId());
    reqDTO.setKey(reqDTO.getKey());
    reqDTO.getVariables().put("name", reqDTO.getName());
    // 创建提交流程
    CommonResult<BpmCommonCreateRespDTO> bpmCommonCreateRespDTO = bpmCommonApi.createAndSubmitFlow(reqDTO);

    //判断是否提交失败，失败抛出异常
    if(bpmCommonCreateRespDTO != null && bpmCommonCreateRespDTO.getData() == null) {
      throw exception(new ErrorCode(500, bpmCommonCreateRespDTO.getMsg())) ;
    }

    return bpmCommonCreateRespDTO.getData() ;
  }
}
